﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Model
{
    public class NodoColaPrioridad
    {

        // -----------------------------------------------------------------
        // Atributos
        // -----------------------------------------------------------------
        /**
        * Elemento del nodo
        */
        public Paciente paciente;

        /**
        * Elemento que le dara la prioridad al nodo de la cola
        */
        public int prioridad;

        /**
        * Siguiente elemento encadenado
        */
        public NodoColaPrioridad sigNodo;



        // -----------------------------------------------------------------
        // Constructores
        // -----------------------------------------------------------------

        /**
        * Constructor por parámetros del nodo. <br>
        * <b>post: </b> Se construyó el nodo con el elemento especificado, sigNodo=null y elemento = pElemento.<br>
        * @param pPrioridad Elemento que le da la prioridad al nodo de la cola. Diferente de null.<br>
        * @param pElemento Elemento que va a ser almacenado en el nodo. Diferente de null<br>
        */
        public NodoColaPrioridad(int pPrioridad, Paciente pElemento)
        {
            paciente = pElemento;
            prioridad = pPrioridad;
            sigNodo = null;
        }

        // -----------------------------------------------------------------
        // Métodos
        // -----------------------------------------------------------------

        /**
        * Retorna el elemento del nodo. <br>
        * <b>post: </b> Se retornó el elemento contenido en el nodo.<br>
        * @return El elemento contenido en el nodo. Diferente de null<br>
        */
        public Paciente darPaciente()
        {
            return paciente;
        }

        /**
        * Retorna el elemento que le da la prioridad al nodo. <br>
        * <b>post: </b> Se retornó el elemento que le da la prioridad al nodo.<br>
        * @return El elemento que le da la prioridad al nodo. Diferente de null<br>
        */
        public int darPrioridad()
        {
            return prioridad;
        }

        /**
        * Desconecta el nodo de la cola suponiendo que es el primero. <br>
        * <b>pre: </b> El nodo actual es el primer nodo de la cola. <br>
        * <b>post: </b> Se retornó el nodo con el cual comienza la cola ahora, sigNodo=null.<br>
        * @return Nodo con el cual comienza la cola ahora.<br>
        */
        public NodoColaPrioridad desconectarPrimero()
        {
            NodoColaPrioridad p = sigNodo;
            sigNodo = null;
            return p;
        }

        /**
        * Inserta el nodo especificado después del nodo actual. <br>
        * <b>post: </b> Se insertó el nodo después del nodo actual lo que implica que sigNodo=nodo.<br>
        * @param nodo El nodo a ser insertado<br>
        * @return Nodo que se insertó después del nodo actual<br>
        */
        public NodoColaPrioridad insertarDespues(NodoColaPrioridad nodo)
        {
            sigNodo = nodo;
            return nodo;
        }

        /**
        * Retorna el siguiente nodo. <br>
        * <b>post: </b> Se retornó el siguiente nodo.<br>
        * @return El nodo siguiente<br>
        */
        public NodoColaPrioridad darSiguiente()
        {
            return sigNodo;
        }

    }
}
